package com.cheer.ba.view.base;

import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;

/**
 * Created by JS01 on 2016/6/7.
 * MVP View层，只处理UI相关逻辑
 */
public interface IViewController {

    /**
     * 加载布局资源
     *
     * @param inflater
     * @return View对象
     */
    @Nullable
    public View loadView(LayoutInflater inflater);

    /**
     * 加载子布局资源
     *
     * @param inflater
     * @return View对象
     */
    @Nullable
    public View loadView(LayoutInflater inflater, View childView);

    /**
     * 初始化Presenter，MVP模式中
     */
    public void initPresenter();

    /**
     * 处理控件和布局
     */
    public void initView();

    /**
     * 初始化数据
     */
    public void initData();

    /**
     * 显示加载进度
     */
    public void showLoading();

    /**
     * 隐藏加载进度
     */
    public void hideLoading();

    /**
     * 更新UI界面
     *
     * @param t   model
     * @param <T>
     */
    public <T> void updateView(T t);

    /**
     * 更新UI界面,根据类别区分
     *
     * @param t   model
     * @param <T>
     */
    public <T> void updateViewWithTag(T t, String tag);

    /**
     * 更新UI界面,根据类别区分
     *
     * @param t   model
     * @param <T>
     */
    public <T> void updateViewWithLoadMore(T t, boolean loadMore, String tag);

    /**
     * 带分页的更新UI，主要用于界面元素
     *
     * @param t         model
     * @param flag      状态码-由自己指定
     * @param str       描述
     * @param loadMore  是否加载更多 true 加载更多
     * @param direction 刷新方向 true 刷新向下
     * @param size      新数据的条目
     * @param <T>
     */
    public <T> void updateViewWithLoadMore(T t, int flag, String str, boolean loadMore, boolean direction, int size);

    /**
     * 根据状态处理提醒-非弹出框
     *
     * @param mView
     * @param isHandler     是否由用户自己处理
     * @param loadingStatus 系统状态码
     * @param flag          状态码-跟随自己指定
     */
    void onLoadingStatus(IViewController mView, boolean isHandler, int loadingStatus, int flag);

    /**
     * 处理数据加载，弹出提示框
     *
     * @param mView
     * @param isHandler     是否由用户自己处理
     * @param loadingStatus 系统状态码
     * @param flag          状态码-跟随自己指定
     * @param string        描述
     */
    void onLoadingStatus(IViewController mView, boolean isHandler, int loadingStatus, int flag, String string);

    /**
     * 处理列表界面数据刷新
     *
     * @param mView
     * @param isHandler     是否由用户自己处理
     * @param loadingStatus 系统状态码
     * @param flag          状态码-跟随自己指定
     * @param string        描述
     * @param loadMore      是否加载更多 true 加载更多
     */
    void onLoadingStatus(IViewController mView, boolean isHandler, int loadingStatus, int flag, String string, boolean loadMore);

    /**
     * 处理列表界面数据刷新
     *
     * @param mView
     * @param isHandler     是否由用户自己处理
     * @param loadingStatus 系统状态码
     * @param flag          状态码-跟随自己指定
     * @param string        描述
     * @param loadMore      是否加载更多 true 加载更多
     * @param isDirection   刷新方向 true 刷新向下
     */
    void onLoadingStatus(IViewController mView, boolean isHandler, int loadingStatus, int flag, String string, boolean loadMore, boolean isDirection);

    /**
     * 列表是否有数据
     *
     * @return
     */
    boolean hasDataInPage();

    /**
     * 所属列表界面自己处理数据
     *
     * @param flag1 状态码跟随系统
     * @param flag2 状态码-由自己指定
     */
    void handlerByPage(int flag1, int flag2);

    /**
     * 所属列表界面自己处理数据
     *
     * @param flag1  状态码跟随系统
     * @param flag2  状态码-由自己指定
     * @param string 提醒信息
     */
    void handlerByPage(int flag1, int flag2, String string);

    /**
     * 所属列表界面自己处理数据
     *
     * @param flag1    状态码跟随系统
     * @param flag2    状态码-由自己指定
     * @param loadMore 是否加载更多 true 是的
     */
    void handlerByPage(int flag1, int flag2, boolean loadMore);

    /**
     * 所属列表界面自己处理数据
     *
     * @param flag1     状态码跟随系统
     * @param flag2     状态码-由自己指定
     * @param loadMore  是否加载更多 true 是的
     * @param direction 刷新方向 true 方向向下
     */
    void handlerByPage(int flag1, int flag2, boolean loadMore, boolean direction);
}
